package ExtendsStudy.demo_02;

public class Test {
    static class Ye {
        int num = 10;
        public Ye(int num){

        }
    }

    /**
     * 子类重写父类的方法时:
     * 1.权限修饰符要大于等于父类
     * 2.父类中的private和static修饰的方法不可被重写,即只能重写虚方法表中的方法
     * 3.参数列表必须和父类中的参数列表一致
     * 4.返回值类型:
     * 如果返回值是基本数据类型的话,要与父类保持一致
     * 如果返回值是引用数据类型的话,要小于等于父类
     */
    static class Fu extends Ye {
        int num = 20;

        public Fu() {
            this(1);
        }
        public Fu(int num){
            super(num);
        }

        protected Fu eat(Fu a) {
            return null;
        }
    }

    static class Zi extends Fu {

        @Override
        public Zi eat(Fu a) {
            return null;
        }

        int num = 30;

        public void show() {
            Ye ye = new Ye(1);
            int num = 40;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(super.num);
            System.out.println(ye.num);
        }
    }

    public static void main(String[] args) {
        // 创建子类时 会首先调用父类的空参构造 层层递进
        Zi zi = new Zi();
        zi.show();
    }
}

interface a{
}
interface b{

}
interface c extends b,a{

}




